home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MOTOROLA / 6805V107 / 68705SVC.PAS < prev    next >
Pascal/Delphi Source File  |  1988-05-05  |  6KB  |  178 lines

  1. Procedure DoEmulation;         {The Emulator / File-Viewer Package}
  2.  
  3.         {Common data declarations & routines for Debugger & Viewer}
  4. const
  5.    windsep    =35;             {Location of window divider}
  6.    baseline   =24;             {Location of base-line on screen}
  7.    lastline   =23;             {Final line of display: baseline-1}
  8.  
  9.    baseleft   : coord = (1,baseline);
  10.    basecentre : coord = (windsep,baseline);
  11.    baseright  : coord = (80,baseline);
  12.    septop     : coord = (windsep,1);
  13.    sepbot     : coord = (windsep,baseline);
  14.  
  15. type
  16.    dispuse    = (character, attribute);
  17.    diselement = array[character..attribute] of byte;
  18.    winline    = array[windsep..80] of diselement;
  19.    savewind   = record
  20.                 cursor  : coord;
  21.                 picture : array[1..baseline] of winline;
  22.                 end;
  23.    windptr    = ^savewind;
  24.  
  25.    CRTline    = array[1..80] of diselement;
  26.    Screen     = array[1..25] of CRTline;
  27.    CRTptr     = ^Screen;
  28.  
  29. var
  30.    debugwind,                     {Save window: DEBUG Screen}
  31.    viewind,                       {Save window: VIEWER Screen}
  32.    helpwind   : savewind;         {Save window: HELP  Screen}
  33.    CRTbase    : CRTptr;           {Base of screen buffer [1,1]}
  34.    firsthelp  : boolean;          {First entry to HELP screen}
  35.  
  36.  
  37. procedure showwindow(var which :savewind);  {Moves WHICH to Screen}
  38. var
  39.    line : integer;
  40.  
  41. begin
  42.    window(1,1,80,25);
  43.    with which do
  44.       for line:= 1 to baseline do move(picture[line], CRTbase^[line,windsep],
  45.                                        (81-windsep)*sizeof(diselement));
  46.    window(windsep+1,1,80,baseline-1);
  47.    end;
  48.  
  49. procedure savewindow(var which :savewind);  {Moves Screen to WHICH}
  50. var
  51.    line : integer;
  52.  
  53. begin
  54.    with which do begin
  55.       cursor[xco]:= wherex;
  56.       cursor[yco]:= wherey;
  57.       window(1,1,80,25);
  58.       for line:= 1 to baseline do move(CRTbase^[line,windsep], picture[line],
  59.                                        (81-windsep)*sizeof(diselement));
  60.       end
  61.    end;
  62.  
  63. procedure promptline(prompts :Str255);     {Display the prompt line}
  64.                                    {The following chars. act as format cmnds.
  65.                                     Open-Curly - High Video
  66.                                    Close-Curly - Low  Video
  67.                                          Tilde - Next (only) has Bit-7 added
  68.                                      Vert.-Bar - Next (only) as Control Chr. }
  69. var
  70.    ptr  : integer;
  71.    bit7,
  72.    ctrl,
  73.    data : byte;
  74.  
  75. begin
  76.    gotoxy(1,25);                  {To prompt line}
  77.    clreol;
  78.    lowvideo;
  79.    ptr := 1;
  80.    bit7:= 0;
  81.    ctrl:= $ff;
  82.    while (ptr <= length(prompts)) do begin
  83.       case prompts[ptr] of
  84.          '{' : highvideo;
  85.          '}' : lowvideo;
  86.          '~' : bit7:= $80;
  87.          '|' : ctrl:= $bf;
  88.          else begin
  89.             data:= (ord(prompts[ptr]) + bit7) and ctrl;
  90.             write(chr(data));
  91.             if (data = $ba) then begin
  92.                gotoxy(wherex-1, wherey-1);
  93.                write(chr(midtop));          {Force in a T form}
  94.                gotoxy(wherex, wherey+1);    {Return}
  95.                end;
  96.             bit7:= 0;
  97.             ctrl:= $ff;
  98.             end
  99.          end;
  100.       ptr:= ptr+1;
  101.       end
  102.    end;
  103.  
  104. procedure firstscreen;            {Initial window ops.}
  105. begin
  106.    lowvideo;
  107.    vbar(septop, sepbot);
  108.    gotoxy(windsep,baseline);
  109.    write(chr(midbot));
  110.    gotoxy(windsep,1);
  111.    write(chr(verline));
  112.    highvideo;
  113.    window(windsep+1,1,80,baseline-1);
  114.    end;
  115.  
  116. procedure pulldebug(restore :boolean);  {Pull DEBUG back onto Screen}
  117.                    {RESTORE will reload a saved window, too}
  118. const
  119.     dbp1 = ' {A}dd {C}ompare {D}isplay {E}nter {F}ill {G}o {H}elp {M}ove';
  120.     dbp2 = ' {Q}uit {R}egs {S}earch {T}race {V}iew file';
  121.  
  122. begin
  123.    window(1,1,80,25);
  124.    lowvideo;
  125.    hbar(baseleft,basecentre);
  126.    promptline(dbp1+dbp2);         {Show DEBUG prompts}
  127.    if restore then showwindow(debugwind);         {Get the window back}
  128.    window(1,1,80,baseline-1);     {DEBUG window}
  129.    if restore then with debugwind do gotoxy(cursor[xco],cursor[yco])
  130.               else gotoxy(1,1);
  131.    highvideo;
  132.    end;
  133.  
  134. {Data declarations for the Viewer Module. Placed here, so as to be retained
  135.  across entry & exit to the Viewer window. They are discarded on final exit
  136.  from the Emulator module (ie to Main Menu}
  137.  
  138. const
  139.    VFRmax    = 255;                {Max. subscript in VF array}
  140.  
  141. type
  142.    VFdata    = array[0..VFRmax] of byte;
  143.  
  144.    VFRecord  = record              {Record for the View file, Disk or Heap}
  145.       VFinfo : VFdata;             {A Blocked file, to allow random access}
  146.       end;
  147.  
  148.    VFptype   = ^VFRecord;
  149.  
  150.    VFElement = record              {Element of the Virtual-File control table}
  151.       VFptr  : VFptype;            {Ptr. to buffer}
  152.       VFrecno: integer;            {Record no., or -1}
  153.       end;
  154.  
  155.    VFDescrip = (Recordnum, PosinRecd);
  156.  
  157.    VFPosn    = array[Recordnum..PosinRecd] of integer;  {A file pointer}
  158.  
  159. const
  160.    MaxCtl    = 199;                {Highest subscript in Control array}
  161.  
  162. var
  163.    viewfile  : file of VFRecord;   {The actual Viewer File}
  164.  
  165.    VFControl : array[0..MaxCtl] of VFElement; {The Heap-Control Table}
  166.  
  167.                                    {File Pointers...}
  168.                 {Conventionally, pointing to 1st. char. AFTER a CR}
  169.    TopFile,                        {Top of File}
  170.    BtmFile,                        {The actual end-of-File}
  171.    TopScreen,                      {Current Top-of-Screen position}
  172.    BotScreen,                      {Line following End of Screen}
  173.    EndScreen    : VFposn;          {Locate TopScreen here to display EndFile}
  174.  
  175.    FirstView    : boolean;         {Need to draw the screen layout, first}
  176.    ListHandle,                     {DOS handle for List file}
  177.    ColumnOffset : integer;         {Right-shift viewing position}
  178.